// Filecopy using fstream
// By Ben 09:35 25/09/2016

#include <iostream>
#include <fstream>
#include <Windows.h>

using namespace std;
using std::cout;
using std::endl;

int main(int argc, char *argv[]){

	string InFile = "", outFile = "";
	wstring wfileIn, wfileOut;
	DWORD attrib = 0;
	char c = '\0';
	fstream fin;
	fstream fout;

	if (argc < 2){
		cout << "Usage: " << argv[0] << " <source> <destination>" << endl;
		exit(1);
	}

	InFile = argv[1];
	outFile = argv[2];

	fin.open(InFile.c_str(), ios::in | ios::binary);

	if (!fin){
		cout << "IO/ERROR Cannot read input." << endl;
		exit(1);
	}

	//Get wide string from input filename.
	wfileIn = wstring(InFile.begin(), InFile.end());
	wfileOut = wstring(outFile.begin(), outFile.end());

	//Get file attrib of input file.
	attrib = GetFileAttributes(wfileIn.c_str());

	//Open output for writeing
	fout.open(outFile.c_str(), ios::out | ios::binary);

	if (!fout){
		cout << "IO/ERROR Cannot create output." << endl;
		fin.close();
		exit(1);
	}

	//Set output attrib
	SetFileAttributes(wfileOut.c_str(), attrib);

	//Copy the file.
	c = fin.get();

	while (!fin.eof()){
		//Write char to output.
		fout.put(c);
		//Get char from input.
		c = fin.get();
	}

	//Close output and input files.
	fout.close();
	fin.close();

	return 0;
}